<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Fixed-function (computer graphics)</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Fixed-function_(computer_graphics)"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Fixed-function_computer_graphics rootpage-Fixed-function_computer_graphics skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Fixed-function (computer graphics)</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<p>
In <a href="Computer_graphics" title="Computer graphics">computer graphics</a>, <b>fixed-function</b> is a term primarily used to describe 3D graphics <a href="API" title="API">APIs</a> and <a href="GPU" class="mw-redirect" title="GPU">GPUs</a> designed prior to the advent of <a href="Shader" title="Shader">programmable shaders</a>. The term is also used to describe APIs and <a href="Graphics_pipeline" title="Graphics pipeline">graphics pipelines</a> that do not allow users to change its underlying processing techniques, hence the word 'fixed'. Fixed-function can also refer to graphics processing techniques that employ non-programmable <a href="Application-specific_integrated_circuit" title="Application-specific integrated circuit">dedicated hardware</a>, like the use of <a href="Render_output_unit" title="Render output unit">ROPs</a> to <a href="Rasterisation" title="Rasterisation">rasterize</a> an image.
</p>
<div class="mw-heading mw-heading2"><h2 id="History">History</h2></div>
<p>Although the exact origin of the term 'fixed-function' is unclear, the first known graphics hardware that is considered to be fixed-function is the <a href="IBM_8514" title="IBM 8514">IBM 8514/A</a> graphics add-in-board from 1987. When compared to other graphics hardware of its time, particularly hardware that made use of the <a href="Reduced_instruction_set_computer" title="Reduced instruction set computer">RISC</a>-based <a href="TMS34010" title="TMS34010">TMS34010</a>, the 8514/A has similar processing speeds while also launching at a significantly less expensive price point. However, those benefits came at a cost of programming flexibility, as the 8514/A was designed more like an <a href="Application-specific_integrated_circuit" title="Application-specific integrated circuit">ASIC</a> than its competition that were similar to general-purpose <a href="Central_processing_unit" title="Central processing unit">CPUs</a>.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p><p>Following the 8514/A, the most powerful dedicated graphics hardware of the 1990s have pipelines that are not programmable, only configurable to a limited degree. This means that host CPUs have no direct influence on how its GPUs will process vertex and rasterization operations, beyond issuing indirect commands and transferring data bidirectionally from CPU-sided <a href="Random-access_memory" title="Random-access memory">RAM</a> to GPU-sided <a href="VRAM" class="mw-redirect" title="VRAM">VRAM</a>. As more hardware with this fixed-function design released, 3D graphics API developers of the 90s mimicked the nature of available hardware in their own software design by creating logical graphics pipelines that are only configurable and non-programmable. Graphics APIs of this time, notably <a href="OpenGL" title="OpenGL">OpenGL</a> and early versions <a href="DirectX" title="DirectX">DirectX</a> (<a href="Direct3D" title="Direct3D">Direct3D</a>), are themselves retroactively referred to as fixed-function as they ultimately share many design characteristics with the fixed-function hardware they targeted.<sup id="cite_ref-kirk1_2-0" class="reference"><a href="#cite_note-kirk1-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>
</p><p>Historically fixed-function <a href="API" title="API">APIs</a> consisted of a set of function entry points that would approximately or directly map to dedicated logic for their named purpose in <a href="GPU" class="mw-redirect" title="GPU">GPUs</a> designed to support them. As <a href="Shader" title="Shader">shader</a> based GPUs and APIs evolved, fixed-function APIs were implemented by graphics driver engineers using the more general purpose shading architecture. This approach served as a segue that would continue providing the fixed-function API abstraction most developers were experienced with while allowing further development and enhancements of the newer shader-based architectures.
</p><p>OpenGL, <a href="OpenGL_ES" title="OpenGL ES">OpenGL ES</a> and DirectX are all 3D graphics APIs that went through the transition from the fixed-function programming model to the shader-based programming model.<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> Below is a table of when the transition from fixed-function to shaders was made:
</p>
<table class="wikitable">
<tbody><tr>
<th>3D API</th>
<th>Last Fixed-function Version</th>
<th>First Shader Version
</th></tr>
<tr>
<td>OpenGL</td>
<td>v1.5</td>
<td>v2.0
</td></tr>
<tr>
<td>OpenGL ES</td>
<td>v1.1</td>
<td>v2.0
</td></tr>
<tr>
<td>DirectX</td>
<td>v7.0</td>
<td>v8.0
</td></tr></tbody></table>
<p>Even after the popularization of programmable shaders and graphics pipelines, certain GPU features would remain non-programmable to optimize for speed over flexibility. For example, the NVIDIA <a href="GeForce_6_series" title="GeForce 6 series">GeForce 6 series</a> GPUs delegated early culling, rasterization, <a href="Multisample_anti-aliasing" title="Multisample anti-aliasing">MSAA</a>, depth queries, texture mapping and more to fixed-function implementations. The CPU does not direct the GPU how to specifically process these operations; these features can only be configured to a limited degree.<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Fixed_function_vs_shaders">Fixed function vs shaders</h2></div>
<p>Fixed function <a href="API" title="API">APIs</a> tend to be a simpler programming abstraction with a series of well-defined and specifically named <a href="Graphics_pipeline" title="Graphics pipeline">graphics pipeline</a> stages. Shader-based APIs treat graphics data (vertices and <a href="Pixel" title="Pixel">pixels</a> / <a href="Texel_(graphics)" title="Texel (graphics)">texels</a>) generically and allow a great deal of flexibility in how this data is modulated. More sophisticated rendering techniques are possible using a <a href="Shader" title="Shader">shader</a>-based API.
</p>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */
.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}
/* end https://en.wikipedia.org/ */
</style><cite id="CITEREFPeddie" class="citation web cs1">Peddie, Dr. Jon. <a rel="nofollow" class="external text" href="https://www.computer.org/publications/tech-news/chasing-pixels/Famous-Graphics-Chips-IBMs-professional-graphics-the-PGC-and-8514A">"Famous Graphics Chips: IBM's professional graphics, the PGC and 8514/A"</a>. <i>IEEE Computer Society</i>.</cite></span>
</li>
<li id="cite_note-kirk1-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-kirk1_2-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFKirkHwu2010" class="citation book cs1">Kirk, David B.; Hwu, Wen-mei W. (February 22, 2010). <i>Programming Massively Parallel Processors</i> (1st ed.). <a href="Morgan_Kaufmann_Publishers" title="Morgan Kaufmann Publishers">Morgan Kaufmann Publishers</a>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0123814739</bdi>.</cite></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-3">^</a></b></span> <span class="reference-text"><cite id="CITEREFKirkHwu2013" class="citation book cs1">Kirk, David; Hwu, Wen-mei (2013). "Chapter 2 - History of GPU Computing". <a rel="nofollow" class="external text" href="https://books.google.com/books?id=gjypjgEACAAJ"><i>Programming Massively Parallel Processors: A Hands-on Approach</i></a>. Elsevier/Morgan Kaufmann. pp. <span class="nowrap">23–</span>39. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-93-5107-044-3</bdi>.</cite></span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text"><cite id="CITEREFKilgariffFernandoPharr2005" class="citation book cs1">Kilgariff, Emmett; Fernando, Randima; Pharr, Matt (January 1, 2005). <a rel="nofollow" class="external text" href="https://developer.nvidia.com/gpugems/gpugems2/part-iv-general-purpose-computation-gpus-primer/chapter-30-geforce-6-series-gpu"><i>GPU Gems 2: Programming Techniques for High-Performance Graphics and General-Purpose Computation</i></a>. <a href="Addison-Wesley" title="Addison-Wesley">Addison-Wesley</a>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>0-321-33559-7</bdi>.</cite></span>
</li>
</ol></div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-07-05" href="https://en.wikipedia.org/wiki/?title=Fixed-function_(computer_graphics)&oldid=1298939510">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
</body></html>